R Básico

Uso do R para análises Estatísticas

Prof. Fernando Bastos

04 de abril de 2019

Preliminares

O software R é um conjunto integrado de recursos para leitura e manipulação de dados, cálculos e exibição gráfica. O R é um programa baseado em linhas de comando. Isto é, o usuário cria uma linha de código através de uma sequência de palavras e números. Ao digitar a linha no console, o R interpreta e executa a ação codificada na linha. Também é possível informar para R, um conjunto de linhas de uma única vez, que conhecemos como script. Ao processar o script no console, o R irá ler a primeira linha, interpretar e executar. Só depois que o processamento da primeira linha terminar, é que a segunda linha será lida, interpretada e executada. Esta sequência segue, até que todo o script tenha sido processado.

No caso do R, a linguagem utilizada recebe o mesmo nome: linguagem R. A linguagem R possui regras próprias, que chamamos de sintaxe. Estas regras precisam ser seguidas para assegurar que o programa interprete e processe as linhas com sucesso.

Após instalar o software R e abrir o programa veremos algo semelhante a:

Apesar de ser simples utilizar o R diretamente do seu console raiz, existe um compilador que é mais atrativo. O RStudio é o melhor ambiente disponível para programação em R. Ao abrir o RStudio, você verá 4 ambientes. Observe a figura abaixo.

Esses quadrantes representam o editor, o console, o environment e o output. Eles vêm nesta ordem, e depois você pode organizá-los da forma que preferir.

Listamos abaixo as funções dos principais painéis:

Conhecer atalhos ajuda bastante quando estamos programando no RStudio. Veja os principais:

Vamos agora começar a trabalhar!

Na linguagem R, não é necessário declarar uma variável antes dela ser criada. O programa já tenta determinar a melhor classe com base na primeira vez que algo for atribuído à variável. Vamos rodar a seguinte linha:

x = 1

O sinal “=” é a representação do termo atribuição, e pode ser substituído pelo sinal “<-”. Portanto, o comando abaixo equivale ao comando anterior:

x <- 1

Os comandos acima são equivalentes e podem ser interpretados como: atribua o valor \(1\) à variável x. Ao criar a variável x, o R irá definir x como numérico e armazenar numa estrutura de vetor, pois o \(1\) é claramente um número. Vetor é a estrutura mais simples que uma variável pode assumir, e somente pode assumir um mesmo tipo de dados. No exemplo:

a <- 1

A variável a será automaticamente definida pelo R como um vetor numérico. O principal atributo de uma estrutura do tipo vetor é o comprimento. O vetor a, por exemplo, é um vetor de comprimento um, ou seja, contém apenas um elemento. Isto pode ser comprovado através do seguinte comando:

length(a)
## [1] 1

Note, que quando você quer criar um vetor com mais de um elemento, é necessário utilizar a função c(). A letra c vem de components, assim, ao utilizar a função c() você está informando ao R que construa um vetor com os componentes listados dentro da função.

O R trabalha com padrão internacional de separação decimal e separação de colunas. A separação decimal é “.” (ponto). E a separação de coluna é “,” (vírgula).

Matrizes nada mais são que combinações de vetores com o mesmo comprimento e tipo de dado. As variáveis estruturadas como matriz possuem portanto uma característica que o vetor não tem: dimensão. A dimensão é uma característica que indica quantas linhas e quantas colunas a matriz possui. Vamos criar uma matriz e armazená-la na variável m1:

m1 = matrix(c(2, 4, 3, 1, 5, 7), nrow = 2, ncol = 3, byrow = TRUE)

O comando dim() retorna a dimensão de uma matriz. Antes de rodar esse comando para a matriz recém criada m1, qual a dimensão desta matriz? Se você respondeu 2 x 3, acertou! Agora rode o comando abaixo e tire a prova:

dim(m1)
## [1] 2 3

Dataframe é uma condição especial de combinação lado a lado de vetores. Ao contrário das matrizes, o dataframe não exige que os vetores tenham os mesmos tipos de dados. Assim, por exemplo, a primeira coluna do dataframe pode ser numérica, e a segunda coluna pode ser de texto e a terceira coluna com data. O R possui alguns dataframes que vem automaticamente quando o software é instalado. Estes dataframes são geralmente usados como exemplos nos tutoriais e arquivos de ajuda. Uma dessas bases é o mtcars.

Para carregarmos esta base de dados basta digitar:

data("mtcars")

Após digitar o comando acima em seu console, você terá criado uma variável na memória chamada mtcars contendo os dados em questão.

Como exemplo, vamos usar o comando head() para visualizar as colunas deste dataframe e as 6 primeiras linhas:

head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Visualizando apenas as 6 primeiras linhas do dataframe mtcars podemos perceber que este é a estrutura de dados que se assemelha às planilhas eletrônicas como Excel. Assim, podemos entender o dataframe como sequência de observações (linhas) de determinadas variáveis (colunas). Assim como as matrizes, os dataframes também possuem dimensão, e também podemos verificar a dimensão através do comando dim().

No script abaixo, seguem outros comandos úteis para serem usados com os dataframes:

# retorna o nome das colunas do dataframe
names(mtcars)
##  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
## [11] "carb"
#retorna as 6 últimas linhas do dataframe
tail(mtcars)
##                 mpg cyl  disp  hp drat    wt qsec vs am gear carb
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2
## Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.5  0  1    5    4
## Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.5  0  1    5    6
## Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.6  0  1    5    8
## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.6  1  1    4    2

# retorna um resumo estatístico das colunas do dataframe
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

No script acima aproveitamos para apresentar a sinalização de comentário. Toda linha no R iniciada com o # não é interpretada pelo console. Assim, o símbolo # é usado para incluirmos comentários em nosso código. Veja que no script, cada linha iniciada pelo sinal # explica o comando seguinte.

Podemos acessar qualquer registro dentro do dataframe utilizando a mesma notação de matrizes:

mtcars[1,]
##           mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
mtcars[1,2]
## [1] 6
mtcars[,3]
##  [1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6
## [12] 275.8 275.8 275.8 472.0 460.0 440.0  78.7  75.7  71.1 120.1 318.0
## [23] 304.0 350.0 400.0  79.0 120.3  95.1 351.0 145.0 301.0 121.0

mtcars[1:3,]
##                mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
mtcars[,1:4]
##                      mpg cyl  disp  hp
## Mazda RX4           21.0   6 160.0 110
## Mazda RX4 Wag       21.0   6 160.0 110
## Datsun 710          22.8   4 108.0  93
## Hornet 4 Drive      21.4   6 258.0 110
## Hornet Sportabout   18.7   8 360.0 175
## Valiant             18.1   6 225.0 105
## Duster 360          14.3   8 360.0 245
## Merc 240D           24.4   4 146.7  62
## Merc 230            22.8   4 140.8  95
## Merc 280            19.2   6 167.6 123
## Merc 280C           17.8   6 167.6 123
## Merc 450SE          16.4   8 275.8 180
## Merc 450SL          17.3   8 275.8 180
## Merc 450SLC         15.2   8 275.8 180
## Cadillac Fleetwood  10.4   8 472.0 205
## Lincoln Continental 10.4   8 460.0 215
## Chrysler Imperial   14.7   8 440.0 230
## Fiat 128            32.4   4  78.7  66
## Honda Civic         30.4   4  75.7  52
## Toyota Corolla      33.9   4  71.1  65
## Toyota Corona       21.5   4 120.1  97
## Dodge Challenger    15.5   8 318.0 150
## AMC Javelin         15.2   8 304.0 150
## Camaro Z28          13.3   8 350.0 245
## Pontiac Firebird    19.2   8 400.0 175
## Fiat X1-9           27.3   4  79.0  66
## Porsche 914-2       26.0   4 120.3  91
## Lotus Europa        30.4   4  95.1 113
## Ford Pantera L      15.8   8 351.0 264
## Ferrari Dino        19.7   6 145.0 175
## Maserati Bora       15.0   8 301.0 335
## Volvo 142E          21.4   4 121.0 109

mtcars[1:3,1:4]
##                mpg cyl disp  hp
## Mazda RX4     21.0   6  160 110
## Mazda RX4 Wag 21.0   6  160 110
## Datsun 710    22.8   4  108  93

Outro recurso poderoso do R são os filtros. Você pode tanto usar a notação de [] ou então a função subset(). Vamos ver alguns exemplos de filtros. No exemplo 1, imagine que queremos separar as linhas que possuem o valor 4 na variável cyl. Podemos usar a função subset() ou a notação []:

subset(mtcars, mtcars$cyl == 4)
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

mtcars[mtcars$cyl == 4,]
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

Agora, imagine que queremos as variáveis mpg e hp das observações que possuem o valor 4 na variável cyl:

subset(mtcars, mtcars$cyl == 4, select = c("mpg", "hp"))
##                 mpg  hp
## Datsun 710     22.8  93
## Merc 240D      24.4  62
## Merc 230       22.8  95
## Fiat 128       32.4  66
## Honda Civic    30.4  52
## Toyota Corolla 33.9  65
## Toyota Corona  21.5  97
## Fiat X1-9      27.3  66
## Porsche 914-2  26.0  91
## Lotus Europa   30.4 113
## Volvo 142E     21.4 109
mtcars[mtcars$cyl == 4, c(1, 4)]
##                 mpg  hp
## Datsun 710     22.8  93
## Merc 240D      24.4  62
## Merc 230       22.8  95
## Fiat 128       32.4  66
## Honda Civic    30.4  52
## Toyota Corolla 33.9  65
## Toyota Corona  21.5  97
## Fiat X1-9      27.3  66
## Porsche 914-2  26.0  91
## Lotus Europa   30.4 113
## Volvo 142E     21.4 109

A última estrutura de dados que iremos ver são as listas. Listas funcionam como um varal. Num varal podemos pendurar vários tipos de coisas. Você pode pendurar roupas, quadros, cadeira, fotos e várias outras coisas que você nem imagina. No R, a lista funciona da mesma forma. Você pode incluir numa lista diferentes dados e estruturas.

a <- 1
x <- c(1,2,3)
dados <- list(1,x,mtcars)
dados
## [[1]]
## [1] 1
## 
## [[2]]
## [1] 1 2 3
## 
## [[3]]
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

Para recuperar o objeto de uma lista, podemos usar a notação [[ ]].

dados[[2]]
## [1] 1 2 3

Ao longo deste capítulo, criamos na memória do nosso computador várias variáveis. Você consegue se lembrar de todas elas? Não se preocupe. Existe uma função que faz isto para você:

ls()
## [1] "a"      "dados"  "m1"     "mtcars" "x"

E se não quisermos mais a variável x? Sem problemas, podemos deletar através do comando rm():

rm(x)

Se quiser excluir todas as variáveis que você criou na memória, basta usar o comando:

rm(list = ls(all=TRUE))

Objetos atômicos

Existem cinco classes básicas ou “atômicas” no R:

Veja alguns exemplos:

# characters

"a"
## [1] "a"
"1"
## [1] "1"
"positivo"
## [1] "positivo"
"Error: objeto x não encontrado"
## [1] "Error: objeto x não encontrado"
# numeric

1
## [1] 1
0.10
## [1] 0.1
0.95
## [1] 0.95
pi
## [1] 3.141593
# integer

1L
## [1] 1
5L
## [1] 5
10L
## [1] 10
# complex (raramente utilizado para análise de dados)

2 + 5i
## [1] 2+5i
# logical

TRUE
## [1] TRUE
FALSE
## [1] FALSE

Para saber a classe de um objetivo, você pode usar a função class().

x <- 1
class(x)
## [1] "numeric"
y <- "a"
class(y)
## [1] "character"
z <- TRUE
class(z)
## [1] "logical"

Vetores

Vetores no R são os objetos mais simples que podem guardar objetos atômicos.

vetor1 <- c(1, 2, 3, 4)
vetor2 <- c("a", "b", "c")

vetor1
## [1] 1 2 3 4
vetor2
## [1] "a" "b" "c"

Um vetor tem sempre a mesma classe dos objetos que guarda.

class(vetor1)
## [1] "numeric"
class(vetor2)
## [1] "character"

De forma bastante intuitiva, você pode fazer operações com vetores.

vetor1 - 1
## [1] 0 1 2 3

Quando você faz vetor1 - 1, o R subtrai 1 de cada um dos elementos do vetor. O mesmo acontece quando você faz qualquer operação aritmética com vetores no R.

Você também pode fazer operações que envolvem mais de um vetor:

vetor1 * vetor1
## [1]  1  4  9 16

Neste caso, o R irá alinhar os dois vetores e multiplicar elemento por elemento. Isso pode ficar um pouco confuso quando os dois vetores não possuem o mesmo tamanho:

vetor2 <- 1:3
vetor1 * vetor2
## Warning in vetor1 * vetor2: comprimento do objeto maior não é múltiplo do
## comprimento do objeto menor
## [1] 1 4 9 4

O R alinhou os dois vetores e, como eles não possuíam o mesmo tamanho, foi repetindo o vetor menor até completar o vetor maior. Esse comportamento é chamado de reciclagem e é útil para fazer operações elemento por elemento (vetorizadamente), mas às vezes pode ser confuso. Com o tempo, você aprenderá a se aproveitar dele.

Misturando objetos

Vetores são homogêneos

Os elementos de um vetor são sempre da mesma classe. Ou todos são numéricos, ou são todos character, ou todos são lógicos etc. Não dá para ter um número e um character no mesmo vetor, por exemplo.

Se colocarmos duas ou mais classes diferentes dentro de um mesmo vetor, o R vai forçar que todos os elementos passem a pertencer à mesma classe. O número 1.7 viraria "1.7" se fosse colocado ao lado de um "a".

A ordem de precedência é:

DOMINANTE character > complex > numeric > integer > logical RECESSIVO

Forçando classes explicitamente

Você pode coagir um objeto a ser de uma classe específica com as funções as.character(), as.numeric(), as.integer() e as.logical(). É equivalente à função convert() do SQL.

x <- 0:4
class(x)
## [1] "integer"
as.numeric(x)
## [1] 0 1 2 3 4
as.logical(x)
## [1] FALSE  TRUE  TRUE  TRUE  TRUE
as.character(x)
## [1] "0" "1" "2" "3" "4"

Se o R não entender como coagir uma classe na outra, ele soltará um warning informado que colocou NA no lugar.

x <- c("a", "b", "c")
as.numeric(x)
## Warning: NAs introduzidos por coerção
## [1] NA NA NA

Observação

O NA tem o mesmo papel que o null do SQL. Porém, há um NULL no R também, com diferenças sutis que vamos abordar mais adiante.

Fatores

Fatores podem ser vistos como vetores de inteiros que possuem rótulos (levels).

sexo <- c("M", "H", "H", "H", "M", "M", "H")
fator <- as.factor(sexo)
fator
## [1] M H H H M M H
## Levels: H M
as.numeric(fator)
## [1] 2 1 1 1 2 2 1

Eles são úteis para representar uma variável categórica (nominal e ordinal). Na modelagem, eles serão tratados de maneira especial em funções como lm() e glm().

A função levels() retorna os rótulos do fator:

levels(fator)
## [1] "H" "M"

Quando um vetor de números está como factor, ao tentar transformá-lo em numeric, você receberá um vetor de inteiros que não tem nada a ver com os valores originais!

numeros <- factor(c("10", "55", "55", "12", "10", "-5", "-90"))
as.numeric(numeros)
## [1] 3 5 5 4 3 1 2

Para evitar isso, use as.character() antes de transformar para número.

as.numeric(as.character(numeros))
## [1]  10  55  55  12  10  -5 -90

Valores especiais

Existem valores reservados para representar dados faltantes, infinitos, e indefinições matemáticas.

representa indefinições matemáticas, como 0/0 e log(-1). Um NaN é um NA, mas a recíproca não é verdadeira.

é um número muito grande ou o limite matemático, por exemplo, 1/0 e 10^310. Aceita sinal negativo -Inf.

x <- c(NaN, Inf, 1, 2, 3, NA)
is.na(x)
## [1]  TRUE FALSE FALSE FALSE FALSE  TRUE
is.nan(x)
## [1]  TRUE FALSE FALSE FALSE FALSE FALSE

Projetos no R

Uma funcionalidade importante é a criação de projetos, permitindo dividir o trabalho em múltiplos ambientes, cada um com o seu diretório, documentos e workspace.

Para criar um projeto, clique em New Project… no Menu File. Na caixa de diálogo que aparecerá, clique em New Directory para criar o projeto em uma nova pasta ou Existing Directory para criar em uma pasta existente. Se você tiver o Git instalado, você também pode usar projetos para conectar com repositórios do Github e outras plataformas de desenvolvimento. Para isso, basta clicar em Version Control.

Você conseguirá utilizar o RStudio mesmo sem definir o espaço de trabalho. No entanto, existem alguns benefícios quando quando definimos o espaço de trabalho:

Importação de Dados

Vamos introduzir os principais pacotes para importar dados para o R. Mostraremos como importar dados de arquivos de texto e de planilhas do excel. Antes é importante saber o ciclo da ciência de dados:

Grande parte dos dados que utilizaremos em nossas análises estarão salvos em planilhas eletrônicas como Excel, LibreOffice e outros. Embora seja possível importar arquivos com extensão .xls e .xlsx, recomendo que seja utilizado sempre a extensão genérica .csv (comma-separeted value) ou . txt. Todo arquivo do tipo csv possui dois elementos básicos que podem influenciar na importação:

#

No formato regional brasileiro, o separador decimal é a vírgula “(,)” e o separador de coluna é o ponto e vírgula “(;)”. Já no formato americano, utiliza-se o ponto “(.)” como separador decimal e a vírgula “(,)” como separador de colunas. Durante a importação de uma planilha eletrônica, pode ser necessário informar qual o separador decimal e qual o separador de colunas utilizados no arquivo, para que a leitura dos dados pelo R ocorra sem problemas.

Dois comandos podem ser utilizados para importar os dados:

read.csv(arquivo, sep=..., dec=...)

read.table(arquivo, sep=..., dec=...)

Ambos comandos possuem os parâmetros que definem o separador de colunas e o separador decimal: sep para separador de colunas e dec para separador decimal.

rm(list=ls())
if(!is.null(dev.list())) dev.off()
## null device 
##           1
getwd()#Visualizar diretorio de trabalho
## [1] "E:/Documentos/GitHub/MAF105/maf105.github.io/Aulas_MAF105/Curso_R"
#setwd("E:/Documentos/GitHub/MAF105/maf105.github.io/Aulas_MAF105/Curso_R")#Modificar diretorio de trabalho
cat("\014")

#Formato .csv e .txt - Sem a necessidade de pacote
dados1 <- read.table("Dados/CompanhiaMB_clear3.csv",dec = ",")#*Lembre-se do sep = ";"
str(dados1)
## 'data.frame':    37 obs. of  1 variable:
##  $ V1: Factor w/ 37 levels "1;solteiro;fundamental;NA;4,00;26;3;interior",..: 37 1 12 23 31 32 33 34 35 36 ...
dados1 <- read.table("Dados/CompanhiaMB_clear3.csv",dec = ",",sep = ";")
str(dados1)
## 'data.frame':    37 obs. of  8 variables:
##  $ V1: Factor w/ 37 levels "1","10","11",..: 37 1 12 23 31 32 33 34 35 36 ...
##  $ V2: Factor w/ 3 levels "casado","Estado_Civil",..: 2 3 1 1 3 3 1 3 3 1 ...
##  $ V3: Factor w/ 4 levels "fundamental",..: 2 1 1 1 3 1 1 1 1 3 ...
##  $ V4: Factor w/ 6 levels "0","1","2","3",..: 6 NA 2 3 NA NA 1 NA NA 2 ...
##  $ V5: Factor w/ 37 levels "10,53","10,76",..: 37 19 20 21 22 23 24 25 26 28 ...
##  $ V6: Factor w/ 25 levels "20","23","25",..: 25 4 10 14 1 18 6 19 21 12 ...
##  $ V7: Factor w/ 13 levels "0","1","10","11",..: 13 6 3 8 3 10 1 1 7 3 ...
##  $ V8: Factor w/ 4 levels "capital","interior",..: 4 2 1 1 3 3 2 2 1 1 ...
#Formato .csv e .txt - Sem a necessidade de pacote
dados1 <- read.table("Dados/CompanhiaMB_clear3.csv",dec = ",",sep = ";",header = TRUE)
str(dados1)
## 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: Factor w/ 2 levels "casado","solteiro": 2 1 1 2 2 1 2 2 1 2 ...
##  $ Grau        : Factor w/ 3 levels "fundamental",..: 1 1 1 2 1 1 1 1 2 2 ...
##  $ N_filhos    : int  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : int  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : int  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : Factor w/ 3 levels "capital","interior",..: 2 1 1 3 3 2 2 1 1 3 ...
dados2 <- read.table("Dados/CompanhiaMB_clear.txt",dec = ",",sep = ";",encoding="UTF-8")
str(dados2)
## 'data.frame':    37 obs. of  1 variable:
##  $ V1: Factor w/ 37 levels "<U+FEFF>Registro  Estado_Civil\t  Grau\t        N_filhos Salario\tId_Anos\tId_Meses\tProcedencia",..: 1 2 13 24 32 33 34 35 36 37 ...
#Formato .csv e .txt - Sem a necessidade de pacote
dados2 <- read.table("Dados/CompanhiaMB_clear.txt", encoding="UTF-8", sep="")
str(dados2)
## 'data.frame':    37 obs. of  8 variables:
##  $ V1: Factor w/ 37 levels "<U+FEFF>Registro","1",..: 1 2 13 24 32 33 34 35 36 37 ...
##  $ V2: Factor w/ 3 levels "casado","Estado_Civil",..: 2 3 1 1 3 3 1 3 3 1 ...
##  $ V3: Factor w/ 4 levels "fundamental",..: 2 1 1 1 3 1 1 1 1 3 ...
##  $ V4: Factor w/ 6 levels "0","1","2","3",..: 6 NA 2 3 NA NA 1 NA NA 2 ...
##  $ V5: Factor w/ 37 levels "10,53","10,76",..: 37 19 20 21 22 23 24 25 26 28 ...
##  $ V6: Factor w/ 25 levels "20","23","25",..: 25 4 10 14 1 18 6 19 21 12 ...
##  $ V7: Factor w/ 13 levels "0","1","10","11",..: 13 6 3 8 3 10 1 1 7 3 ...
##  $ V8: Factor w/ 4 levels "capital","interior",..: 4 2 1 1 3 3 2 2 1 1 ...
dados2 <- read.table("Dados/CompanhiaMB_clear.txt", encoding="UTF-8", sep="",header = TRUE,dec = ",")
str(dados2)
## 'data.frame':    36 obs. of  8 variables:
##  $ X.U.FEFF.Registro: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil     : Factor w/ 2 levels "casado","solteiro": 2 1 1 2 2 1 2 2 1 2 ...
##  $ Grau             : Factor w/ 3 levels "fundamental",..: 1 1 1 2 1 1 1 1 2 2 ...
##  $ N_filhos         : int  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario          : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos          : int  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses         : int  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia      : Factor w/ 3 levels "capital","interior",..: 2 1 1 3 3 2 2 1 1 3 ...
names(dados2) <- c("Registro","Estado_Civil","Grau","N_filhos","Salario","Id_Anos","Id_Meses","Procedencia")
head(dados2)
##   Registro Estado_Civil        Grau N_filhos Salario Id_Anos Id_Meses
## 1        1     solteiro fundamental       NA    4.00      26        3
## 2        2       casado fundamental        1    4.56      32       10
## 3        3       casado fundamental        2    5.25      36        5
## 4        4     solteiro       medio       NA    5.73      20       10
## 5        5     solteiro fundamental       NA    6.26      40        7
## 6        6       casado fundamental        0    6.66      28        0
##   Procedencia
## 1    interior
## 2     capital
## 3     capital
## 4       outra
## 5       outra
## 6    interior

Outras Funções

#Formato .csv e .txt - Sem a necessidade de pacote
dados1 <- read.csv("Dados/CompanhiaMB_clear3.csv",dec = ",")#*Lembre-se do sep = ";"
str(dados1)
## 'data.frame':    36 obs. of  1 variable:
##  $ Registro.Estado_Civil.Grau.N_filhos.Salario.Id_Anos.Id_Meses.Procedencia: Factor w/ 36 levels "00;26;3;interior",..: 1 18 8 26 9 23 34 13 19 15 ...
dados1 <- read.csv("Dados/CompanhiaMB_clear3.csv",dec = ",",sep = ";")
str(dados1)
## 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: Factor w/ 2 levels "casado","solteiro": 2 1 1 2 2 1 2 2 1 2 ...
##  $ Grau        : Factor w/ 3 levels "fundamental",..: 1 1 1 2 1 1 1 1 2 2 ...
##  $ N_filhos    : int  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : int  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : int  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : Factor w/ 3 levels "capital","interior",..: 2 1 1 3 3 2 2 1 1 3 ...
dados2 <- read.csv("Dados/CompanhiaMB_clear.txt",dec = ",",sep = ";",encoding="UTF-8")
str(dados2)
## 'data.frame':    36 obs. of  1 variable:
##  $ X.U.FEFF.Registro..Estado_Civil...Grau.........N_filhos.Salario.Id_Anos.Id_Meses.Procedencia: Factor w/ 36 levels "1\t  solteiro\t  fundamental\tNA       4,00   \t26\t3       \tinterior",..: 1 12 23 31 32 33 34 35 36 2 ...
dados2 <- read.csv2("Dados/CompanhiaMB_clear.txt", encoding="UTF-8", sep="")
str(dados2)
## 'data.frame':    36 obs. of  8 variables:
##  $ X.U.FEFF.Registro: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil     : Factor w/ 2 levels "casado","solteiro": 2 1 1 2 2 1 2 2 1 2 ...
##  $ Grau             : Factor w/ 3 levels "fundamental",..: 1 1 1 2 1 1 1 1 2 2 ...
##  $ N_filhos         : int  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario          : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos          : int  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses         : int  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia      : Factor w/ 3 levels "capital","interior",..: 2 1 1 3 3 2 2 1 1 3 ...
names(dados2) <- c("Registro","Estado_Civil","Grau","N_filhos","Salario","Id_Anos","Id_Meses","Procedencia")

#Pacote para a leitura de .xlsx e .xls
library(readxl)
dados3<- read_excel("Dados/CompanhiaMB_clear.xlsx")
str(dados3)
## Classes 'tbl_df', 'tbl' and 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : chr  "NA" "1" "2" "NA" ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
dados4 <- read_excel("Dados/CompanhiaMB_clear2.xls",col_types = c("numeric", "text", "text","text", "numeric", "numeric", "numeric","text"))
str(dados4)
## Classes 'tbl_df', 'tbl' and 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : chr  "NA" "1" "2" "NA" ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
#Pacote para a leitura de .txt e .csv
library(readr)
dados5 <- read_delim("Dados/CompanhiaMB_clear3.csv",";", escape_double = FALSE, trim_ws = TRUE)
## Parsed with column specification:
## cols(
##   Registro = col_double(),
##   Estado_Civil = col_character(),
##   Grau = col_character(),
##   N_filhos = col_double(),
##   Salario = col_number(),
##   Id_Anos = col_double(),
##   Id_Meses = col_double(),
##   Procedencia = col_character()
## )
str(dados5)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : num  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  400 456 525 573 626 666 686 739 759 744 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Registro = col_double(),
##   ..   Estado_Civil = col_character(),
##   ..   Grau = col_character(),
##   ..   N_filhos = col_double(),
##   ..   Salario = col_number(),
##   ..   Id_Anos = col_double(),
##   ..   Id_Meses = col_double(),
##   ..   Procedencia = col_character()
##   .. )
dados6 <- read_delim("Dados/CompanhiaMB_clear3.csv",";", escape_double = FALSE, trim_ws = TRUE,locale = locale(decimal_mark = ","))
## Parsed with column specification:
## cols(
##   Registro = col_double(),
##   Estado_Civil = col_character(),
##   Grau = col_character(),
##   N_filhos = col_double(),
##   Salario = col_double(),
##   Id_Anos = col_double(),
##   Id_Meses = col_double(),
##   Procedencia = col_character()
## )
str(dados6)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : num  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Registro = col_double(),
##   ..   Estado_Civil = col_character(),
##   ..   Grau = col_character(),
##   ..   N_filhos = col_double(),
##   ..   Salario = col_double(),
##   ..   Id_Anos = col_double(),
##   ..   Id_Meses = col_double(),
##   ..   Procedencia = col_character()
##   .. )

Antes de iniciar as análises com os dados importados, sempre desconfie!

Inspecione o objeto que recebeu os dados importados para garantir que não houve problemas com o separador decimal, nem com o separador de colunas, nem com os nomes das colunas. Diversos comandos podem ser usados para investigar os dados. Veja alguns exemplos:

dim(dados1)
## [1] 36  8
dim(dados2)
## [1] 36  8
dim(dados3)
## [1] 36  8
dim(dados4)
## [1] 36  8
dim(dados5)
## [1] 36  8
dim(dados6)
## [1] 36  8

str(dados1)
## 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: Factor w/ 2 levels "casado","solteiro": 2 1 1 2 2 1 2 2 1 2 ...
##  $ Grau        : Factor w/ 3 levels "fundamental",..: 1 1 1 2 1 1 1 1 2 2 ...
##  $ N_filhos    : int  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : int  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : int  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : Factor w/ 3 levels "capital","interior",..: 2 1 1 3 3 2 2 1 1 3 ...
str(dados2)
## 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: Factor w/ 2 levels "casado","solteiro": 2 1 1 2 2 1 2 2 1 2 ...
##  $ Grau        : Factor w/ 3 levels "fundamental",..: 1 1 1 2 1 1 1 1 2 2 ...
##  $ N_filhos    : int  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : int  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : int  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : Factor w/ 3 levels "capital","interior",..: 2 1 1 3 3 2 2 1 1 3 ...
str(dados3)
## Classes 'tbl_df', 'tbl' and 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : chr  "NA" "1" "2" "NA" ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
str(dados4)
## Classes 'tbl_df', 'tbl' and 'data.frame':    36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : chr  "NA" "1" "2" "NA" ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
str(dados5)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : num  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  400 456 525 573 626 666 686 739 759 744 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Registro = col_double(),
##   ..   Estado_Civil = col_character(),
##   ..   Grau = col_character(),
##   ..   N_filhos = col_double(),
##   ..   Salario = col_number(),
##   ..   Id_Anos = col_double(),
##   ..   Id_Meses = col_double(),
##   ..   Procedencia = col_character()
##   .. )
str(dados6)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 36 obs. of  8 variables:
##  $ Registro    : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Estado_Civil: chr  "solteiro" "casado" "casado" "solteiro" ...
##  $ Grau        : chr  "fundamental" "fundamental" "fundamental" "medio" ...
##  $ N_filhos    : num  NA 1 2 NA NA 0 NA NA 1 NA ...
##  $ Salario     : num  4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
##  $ Id_Anos     : num  26 32 36 20 40 28 41 43 34 23 ...
##  $ Id_Meses    : num  3 10 5 10 7 0 0 4 10 6 ...
##  $ Procedencia : chr  "interior" "capital" "capital" "outra" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Registro = col_double(),
##   ..   Estado_Civil = col_character(),
##   ..   Grau = col_character(),
##   ..   N_filhos = col_double(),
##   ..   Salario = col_double(),
##   ..   Id_Anos = col_double(),
##   ..   Id_Meses = col_double(),
##   ..   Procedencia = col_character()
##   .. )

head(dados1)
##   Registro Estado_Civil        Grau N_filhos Salario Id_Anos Id_Meses
## 1        1     solteiro fundamental       NA    4.00      26        3
## 2        2       casado fundamental        1    4.56      32       10
## 3        3       casado fundamental        2    5.25      36        5
## 4        4     solteiro       medio       NA    5.73      20       10
## 5        5     solteiro fundamental       NA    6.26      40        7
## 6        6       casado fundamental        0    6.66      28        0
##   Procedencia
## 1    interior
## 2     capital
## 3     capital
## 4       outra
## 5       outra
## 6    interior
head(dados2)
##   Registro Estado_Civil        Grau N_filhos Salario Id_Anos Id_Meses
## 1        1     solteiro fundamental       NA    4.00      26        3
## 2        2       casado fundamental        1    4.56      32       10
## 3        3       casado fundamental        2    5.25      36        5
## 4        4     solteiro       medio       NA    5.73      20       10
## 5        5     solteiro fundamental       NA    6.26      40        7
## 6        6       casado fundamental        0    6.66      28        0
##   Procedencia
## 1    interior
## 2     capital
## 3     capital
## 4       outra
## 5       outra
## 6    interior
head(dados3)
## # A tibble: 6 x 8
##   Registro Estado_Civil Grau  N_filhos Salario Id_Anos Id_Meses Procedencia
##      <dbl> <chr>        <chr> <chr>      <dbl>   <dbl>    <dbl> <chr>      
## 1        1 solteiro     fund~ NA          4         26        3 interior   
## 2        2 casado       fund~ 1           4.56      32       10 capital    
## 3        3 casado       fund~ 2           5.25      36        5 capital    
## 4        4 solteiro     medio NA          5.73      20       10 outra      
## 5        5 solteiro     fund~ NA          6.26      40        7 outra      
## 6        6 casado       fund~ 0           6.66      28        0 interior
head(dados4)
## # A tibble: 6 x 8
##   Registro Estado_Civil Grau  N_filhos Salario Id_Anos Id_Meses Procedencia
##      <dbl> <chr>        <chr> <chr>      <dbl>   <dbl>    <dbl> <chr>      
## 1        1 solteiro     fund~ NA          4         26        3 interior   
## 2        2 casado       fund~ 1           4.56      32       10 capital    
## 3        3 casado       fund~ 2           5.25      36        5 capital    
## 4        4 solteiro     medio NA          5.73      20       10 outra      
## 5        5 solteiro     fund~ NA          6.26      40        7 outra      
## 6        6 casado       fund~ 0           6.66      28        0 interior
head(dados5)
## # A tibble: 6 x 8
##   Registro Estado_Civil Grau  N_filhos Salario Id_Anos Id_Meses Procedencia
##      <dbl> <chr>        <chr>    <dbl>   <dbl>   <dbl>    <dbl> <chr>      
## 1        1 solteiro     fund~       NA     400      26        3 interior   
## 2        2 casado       fund~        1     456      32       10 capital    
## 3        3 casado       fund~        2     525      36        5 capital    
## 4        4 solteiro     medio       NA     573      20       10 outra      
## 5        5 solteiro     fund~       NA     626      40        7 outra      
## 6        6 casado       fund~        0     666      28        0 interior
head(dados6)
## # A tibble: 6 x 8
##   Registro Estado_Civil Grau  N_filhos Salario Id_Anos Id_Meses Procedencia
##      <dbl> <chr>        <chr>    <dbl>   <dbl>   <dbl>    <dbl> <chr>      
## 1        1 solteiro     fund~       NA    4         26        3 interior   
## 2        2 casado       fund~        1    4.56      32       10 capital    
## 3        3 casado       fund~        2    5.25      36        5 capital    
## 4        4 solteiro     medio       NA    5.73      20       10 outra      
## 5        5 solteiro     fund~       NA    6.26      40        7 outra      
## 6        6 casado       fund~        0    6.66      28        0 interior

tail(dados6)
## # A tibble: 6 x 8
##   Registro Estado_Civil Grau  N_filhos Salario Id_Anos Id_Meses Procedencia
##      <dbl> <chr>        <chr>    <dbl>   <dbl>   <dbl>    <dbl> <chr>      
## 1       31 solteiro     supe~       NA    16.2      31        5 outra      
## 2       32 casado       medio        1    16.6      36        4 interior   
## 3       33 casado       supe~        3    17.3      43        7 capital    
## 4       34 solteiro     supe~       NA    18.8      33        7 capital    
## 5       35 casado       medio        2    19.4      48       11 capital    
## 6       36 casado       supe~        3    23.3      42        2 interior

summary(dados1)
##     Registro       Estado_Civil          Grau       N_filhos   
##  Min.   : 1.00   casado  :20    fundamental:12   Min.   :0.00  
##  1st Qu.: 9.75   solteiro:16    medio      :18   1st Qu.:1.00  
##  Median :18.50                  superior   : 6   Median :2.00  
##  Mean   :18.50                                   Mean   :1.65  
##  3rd Qu.:27.25                                   3rd Qu.:2.00  
##  Max.   :36.00                                   Max.   :5.00  
##                                                  NA's   :16    
##     Salario          Id_Anos         Id_Meses        Procedencia
##  Min.   : 4.000   Min.   :20.00   Min.   : 0.000   capital :11  
##  1st Qu.: 7.553   1st Qu.:30.00   1st Qu.: 3.750   interior:12  
##  Median :10.165   Median :34.50   Median : 6.000   outra   :13  
##  Mean   :11.122   Mean   :34.58   Mean   : 5.611                
##  3rd Qu.:14.060   3rd Qu.:40.00   3rd Qu.: 8.000                
##  Max.   :23.300   Max.   :48.00   Max.   :11.000                
## 
summary(dados2)
##     Registro       Estado_Civil          Grau       N_filhos   
##  Min.   : 1.00   casado  :20    fundamental:12   Min.   :0.00  
##  1st Qu.: 9.75   solteiro:16    medio      :18   1st Qu.:1.00  
##  Median :18.50                  superior   : 6   Median :2.00  
##  Mean   :18.50                                   Mean   :1.65  
##  3rd Qu.:27.25                                   3rd Qu.:2.00  
##  Max.   :36.00                                   Max.   :5.00  
##                                                  NA's   :16    
##     Salario          Id_Anos         Id_Meses        Procedencia
##  Min.   : 4.000   Min.   :20.00   Min.   : 0.000   capital :11  
##  1st Qu.: 7.553   1st Qu.:30.00   1st Qu.: 3.750   interior:12  
##  Median :10.165   Median :34.50   Median : 6.000   outra   :13  
##  Mean   :11.122   Mean   :34.58   Mean   : 5.611                
##  3rd Qu.:14.060   3rd Qu.:40.00   3rd Qu.: 8.000                
##  Max.   :23.300   Max.   :48.00   Max.   :11.000                
## 
summary(dados3)
##     Registro     Estado_Civil           Grau             N_filhos        
##  Min.   : 1.00   Length:36          Length:36          Length:36         
##  1st Qu.: 9.75   Class :character   Class :character   Class :character  
##  Median :18.50   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :18.50                                                           
##  3rd Qu.:27.25                                                           
##  Max.   :36.00                                                           
##     Salario          Id_Anos         Id_Meses      Procedencia       
##  Min.   : 4.000   Min.   :20.00   Min.   : 0.000   Length:36         
##  1st Qu.: 7.553   1st Qu.:30.00   1st Qu.: 3.750   Class :character  
##  Median :10.165   Median :34.50   Median : 6.000   Mode  :character  
##  Mean   :11.122   Mean   :34.58   Mean   : 5.611                     
##  3rd Qu.:14.060   3rd Qu.:40.00   3rd Qu.: 8.000                     
##  Max.   :23.300   Max.   :48.00   Max.   :11.000
summary(dados4)
##     Registro     Estado_Civil           Grau             N_filhos        
##  Min.   : 1.00   Length:36          Length:36          Length:36         
##  1st Qu.: 9.75   Class :character   Class :character   Class :character  
##  Median :18.50   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :18.50                                                           
##  3rd Qu.:27.25                                                           
##  Max.   :36.00                                                           
##     Salario          Id_Anos         Id_Meses      Procedencia       
##  Min.   : 4.000   Min.   :20.00   Min.   : 0.000   Length:36         
##  1st Qu.: 7.553   1st Qu.:30.00   1st Qu.: 3.750   Class :character  
##  Median :10.165   Median :34.50   Median : 6.000   Mode  :character  
##  Mean   :11.122   Mean   :34.58   Mean   : 5.611                     
##  3rd Qu.:14.060   3rd Qu.:40.00   3rd Qu.: 8.000                     
##  Max.   :23.300   Max.   :48.00   Max.   :11.000
summary(dados5)
##     Registro     Estado_Civil           Grau              N_filhos   
##  Min.   : 1.00   Length:36          Length:36          Min.   :0.00  
##  1st Qu.: 9.75   Class :character   Class :character   1st Qu.:1.00  
##  Median :18.50   Mode  :character   Mode  :character   Median :2.00  
##  Mean   :18.50                                         Mean   :1.65  
##  3rd Qu.:27.25                                         3rd Qu.:2.00  
##  Max.   :36.00                                         Max.   :5.00  
##                                                        NA's   :16    
##     Salario          Id_Anos         Id_Meses      Procedencia       
##  Min.   : 400.0   Min.   :20.00   Min.   : 0.000   Length:36         
##  1st Qu.: 755.2   1st Qu.:30.00   1st Qu.: 3.750   Class :character  
##  Median :1016.5   Median :34.50   Median : 6.000   Mode  :character  
##  Mean   :1112.2   Mean   :34.58   Mean   : 5.611                     
##  3rd Qu.:1406.0   3rd Qu.:40.00   3rd Qu.: 8.000                     
##  Max.   :2330.0   Max.   :48.00   Max.   :11.000                     
## 
summary(dados6)
##     Registro     Estado_Civil           Grau              N_filhos   
##  Min.   : 1.00   Length:36          Length:36          Min.   :0.00  
##  1st Qu.: 9.75   Class :character   Class :character   1st Qu.:1.00  
##  Median :18.50   Mode  :character   Mode  :character   Median :2.00  
##  Mean   :18.50                                         Mean   :1.65  
##  3rd Qu.:27.25                                         3rd Qu.:2.00  
##  Max.   :36.00                                         Max.   :5.00  
##                                                        NA's   :16    
##     Salario          Id_Anos         Id_Meses      Procedencia       
##  Min.   : 4.000   Min.   :20.00   Min.   : 0.000   Length:36         
##  1st Qu.: 7.553   1st Qu.:30.00   1st Qu.: 3.750   Class :character  
##  Median :10.165   Median :34.50   Median : 6.000   Mode  :character  
##  Mean   :11.122   Mean   :34.58   Mean   : 5.611                     
##  3rd Qu.:14.060   3rd Qu.:40.00   3rd Qu.: 8.000                     
##  Max.   :23.300   Max.   :48.00   Max.   :11.000                     
## 

Help me!

No R, há quatro principais entidades para se pedir ajuda:

A busca por ajuda é feita preferencialmente, mas não necessariamente, na ordem acima.

Você também pode pedir ajuda a um colega!!!

              –

Documentação do R

A documentação do R serve para você aprender a usar uma determinada função.

Cinco dicas:

  1. Os exemplos no final são particularmente úteis.
  2. Leia a seção Usage para ter noção de como usar.
  3. Os parâmetros estão descritos em Arguments. Identifique quais tipos de objetos eles recebem.
  4. Caso essa função não atenda às suas necessidades, a seção See Also sugere funções relacionadas.
  5. Alguns pacotes possuem tutorias de uso mais completos. Esses textos são chamados de vignettes e podem ser acessados com a função vignette(package = 'nomeDoPacote'). Por exemplo, vignette(package = 'dplyr'). Depois de ver a lista de artigos, escolha um nome e rode vignette(topic = 'nome', package = 'nomeDoPacote'). Por exemplo, vignette(topic = 'introduction', package = 'dplyr').

Resumo de Dados

Distribuições de Frequência

tab2_1 <- read.table("Dados/CompanhiaMB_clear3.csv",dec = ",",sep = ";",header = TRUE)
ni<-table(tab2_1$Grau) # Calcula a tabela de frequências absolutas e armazena o resultado em 'mytab'
fi<-prop.table(ni) # Tabela de frequências relativas (f_i)
p_fi<-100*prop.table(ni) # Porcentagem (100 f_i)

# Adiciona linhas de total
ni<-c(ni,sum(ni)) 
fi<-c(fi,sum(fi))
p_fi<-c(p_fi,sum(p_fi))
names(ni)[4]<-"Total"

Para ter o resultado na mesma disposição que na Tabela 2.2, podemos fazer da seguinte forma:

tab2_2<-cbind(ni,fi=round(fi,digits=2),p_fi=round(p_fi,digits=2))
tab2_2
##             ni   fi   p_fi
## fundamental 12 0.33  33.33
## medio       18 0.50  50.00
## superior     6 0.17  16.67
## Total       36 1.00 100.00

#quebras de linha apenas ilustrativas para facilitar a leitura
tab2_3<-as.data.frame(
        t(rbind(
            ni=c(650,1020,330,2000),
            p_fi=c(32.5,51,16.5,1)
        ))
        ,row.names =c("Fundamental","Médio","Superior","Total")
        )
tab2_3
##               ni p_fi
## Fundamental  650 32.5
## Médio       1020 51.0
## Superior     330 16.5
## Total       2000  1.0

ni<-table(cut(tab2_1$Salario, breaks = seq(4,24,by=4),right=FALSE)) # Frequencias por categorias
tab2_4 <- rbind(ni, p_fi = 100*prop.table(ni)) # Frequencias relativas em %
#quebras de linha apenas ilustrativas para facilitar a leitura
tab2_4 <- as.data.frame(
          t(cbind(
                  tab2_4,
                  c(sum(tab2_4[1,]),sum(tab2_4[2,])
          ))),row.names =c(colnames(tab2_4),"Total")) #Construcao da tabela
tab2_4<-transform(tab2_4,p_fi=round(p_fi,digits=2))
tab2_4
##         ni   p_fi
## [4,8)   10  27.78
## [8,12)  12  33.33
## [12,16)  8  22.22
## [16,20)  5  13.89
## [20,24)  1   2.78
## Total   36 100.00

Ramos e Folhas

print("Figura 2.9: Ramo-e-folhas para a Variável S: salários.")
## [1] "Figura 2.9: Ramo-e-folhas para a Variável S: salários."
stem(tab2_1$Salario,scale=2)
## 
##   The decimal point is at the |
## 
##    4 | 06
##    5 | 37
##    6 | 379
##    7 | 446
##    8 | 157
##    9 | 01488
##   10 | 58
##   11 | 16
##   12 | 08
##   13 | 269
##   14 | 77
##   15 | 
##   16 | 026
##   17 | 3
##   18 | 8
##   19 | 4
##   20 | 
##   21 | 
##   22 | 
##   23 | 3
#quebras de linha apenas ilustrativas para facilitar a leitura
dureza<-c(53  ,70.2,84.3,69.5,77.8,87.5,53.4,82.5,67.3,54.1,
          70.5,71.4,95.4,51.1,74.4,55.7,63.5,85.8,53.5,64.3,
          82.7,78.5,55.7,69.1,72.3,59.5,55.3,73  ,52.4,50.7
          )
print("Figura 2.10: Ramo-e-folhas para dados de dureza de peças de alumínio.")
## [1] "Figura 2.10: Ramo-e-folhas para dados de dureza de peças de alumínio."
stem(as.integer(dureza),scale=.5)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   5 | 01233345559
##   6 | 34799
##   7 | 00123478
##   8 | 22457
##   9 | 5
print("Figura 2.11: Ramo-e-folhas para dados de dureza, com ramos divididos.")
## [1] "Figura 2.11: Ramo-e-folhas para dados de dureza, com ramos divididos."
stem(as.integer(dureza),scale=1)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   5 | 0123334
##   5 | 5559
##   6 | 34
##   6 | 799
##   7 | 001234
##   7 | 78
##   8 | 224
##   8 | 57
##   9 | 
##   9 | 5

Representação Gráfica

Gráfico de barras

#quebras de linha apenas ilustrativas para facilitar a leitura
barplot(
  table(tab2_1$Grau),
  ylab="Frequência",
  cex.names=0.7,
  names.arg = c("Fundamental","Médio", "Superior"),
  col="darkgrey",
  border=NA,
  main="Figura 2.2: Gráfico em barras para a variável Y: grau de instrução.",
  axes=TRUE,
  ylim=c(0,20)
  )

#quebras de linha apenas ilustrativas para facilitar a leitura
barplot(
  table(tab2_1$N_filhos),
  ylab="Frequência",
  cex.names=0.7,
  col="darkgrey",
  main="Figura 2.4: Gráfico em barras para a variável Z: Numero de filhos.",
  border=NA)

#quebras de linha apenas ilustrativas para facilitar a leitura
barplot(
  table(cut(tab2_1$Salario, breaks = seq(4,24,by=4),right=FALSE)),
  ylab="Frequência",
  xaxt="n",
  cex.names=0.7,
  col="darkgrey",
  border=NA,
  main="Figura 2.6: Gráfico em barras para a variável S: salários")
axis(1,at=c(.75,1.9,3.1,4.3,5.5),labels=seq(6,22,4),tick=F)

Gráfico de setores (pizza)

labs<-paste(1:3,"(",tab2_2[1:3,1],";",round(tab2_2[1:3,3],1),"%)",sep="")
pie(table(tab2_1$Grau),labels=labs)
#title("Figura 2.3: Gráfico em setores para a variável Y: grau de instrução")
legend(-1.1,-0.8,legend=c("1=Fundamental, 2=Médio, 3=Superior"),border=NA,box.col=NA)

Histograma

fig27<-hist(tab2_1$Salario, breaks = seq(4,24,by=4),right=FALSE,probability = T,plot=F)
## Warning in hist.default(tab2_1$Salario, breaks = seq(4, 24, by = 4), right
## = FALSE, : argument 'probability' is not made use of
aux<-with(fig27, 100 * density* diff(breaks)[1])
labs <- paste(round(aux), "%", sep="")
#quebras de linha apenas ilustrativas para facilitar a leitura
plot(fig27, 
     freq = FALSE, labels = labs, 
     ylab="Densidade de Frequência",
     xlab="Salário",
     col="darkgrey",
     border="white",
     #labels=T,
     main="Figura 2.7: Histograma da variável S: salários",
     xlim=c(0,24), xaxp=c(0,24,6),
     ylim=c(0,.1))

fig28<-hist(tab2_1$N_filhos, right=F, breaks=seq(-.5,5.5,1),plot=F)
aux<-with(fig28, 100 * density* diff(breaks)[1])
labs <- paste(round(aux), "%", sep="")
#quebras de linha apenas ilustrativas para facilitar a leitura
plot(fig28,
  ylab="Densidade de Frequência",
  xlab="Número de Filhos",
  col="darkgrey",
  border="white",
  bty="n",yaxt="n",ylim=c(0,8),
  main="Figura 2.8: Histograma da variável Z: número de filhos",
  labels=labs)

Referências e recomendações

curso-r: Descomplicando a ciência de dados. Site e blog com muito material. Os integrantes são extremamente pró-ativos.

RPubs. Comandos R para análises estatísticas de exercicíos e teoria do livro Estatística Básica(Bussab e Morettin, 2013)

Oliveira, P. F., Guerra, S., McDonnell, R. Ciência de dados com R: Introdução – Brasília: Editora IBPAD, 2018. (Livro muito bom e gratuito)